home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / muds / lpmud312.tar / lpmud312 / str.c < prev    next >
C/C++ Source or Header  |  1992-01-08  |  2KB  |  100 lines

  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. #define DIGIT(x)    (isdigit(x) ? (x) - '0' : \
  5.             islower(x) ? (x) + 10 - 'a' : (x) + 10 - 'A')
  6. #define MBASE    ('z' - 'a' + 1 + 10)
  7.  
  8. long
  9. strtol(str, ptr, base)
  10. register char *str;
  11. char **ptr;
  12. register int base;
  13. {
  14.     register long val;
  15.     register int c;
  16.     int xx, neg = 0;
  17.  
  18.     if (ptr != (char **)0)
  19.         *ptr = str; /* in case no number is formed */
  20.     if (base < 0 || base > MBASE)
  21.         return (0); /* base is invalid -- should be a fatal error */
  22.     if (!isalnum(c = *str)) {
  23.         while (isspace(c))
  24.             c = *++str;
  25.         switch (c) {
  26.         case '-':
  27.             neg++;
  28.         case '+': /* fall-through */
  29.             c = *++str;
  30.         }
  31.     }
  32.     if (base == 0)
  33.         if (c != '0')
  34.             base = 10;
  35.         else if (str[1] == 'x' || str[1] == 'X')
  36.             base = 16;
  37.         else
  38.             base = 8;
  39.     /*
  40.      * for any base > 10, the digits incrementally following
  41.      *    9 are assumed to be "abc...z" or "ABC...Z"
  42.      */
  43.     if (!isalnum(c) || (xx = DIGIT(c)) >= base)
  44.         return (0); /* no number formed */
  45.     if (base == 16 && c == '0' && isxdigit(str[2]) &&
  46.         (str[1] == 'x' || str[1] == 'X'))
  47.         c = *(str += 2); /* skip over leading "0x" or "0X" */
  48.     for (val = -DIGIT(c); isalnum(c = *++str) && (xx = DIGIT(c)) < base; )
  49.         /* accumulate neg avoids surprises near MAXLONG */
  50.         val = base * val - xx;
  51.     if (ptr != (char **)0)
  52.         *ptr = str;
  53.     return (neg ? val : -val);
  54. }
  55.  
  56. strcspn(s, set)
  57. register char *s;
  58. char *set;
  59.  
  60. {
  61. register char *t;
  62. register int count = 0;
  63.     
  64.     while (*s)
  65.     {
  66.         t = set;
  67.         while (*t && (*s != *t)) t++;
  68.         if (!*t)
  69.         {
  70.             s++;
  71.             count++;
  72.         }
  73.         else
  74.             break;
  75.     }
  76.     
  77.     return (count);
  78. }
  79.  
  80.     
  81. char *memset (s, c, n)
  82.      char *s;
  83.      int c, n;
  84. {
  85.    if(c == 0)
  86.       bzero(s, n);
  87.    else{
  88.       fprintf(stderr, "Failed in memset\n");
  89.       exit(1);
  90.    }
  91. }
  92.  
  93. char *memcpy(b,a,s)
  94.     char *b, *a;
  95.     int s;
  96. {
  97.     bcopy(a,b,s);
  98.     return b;
  99. }
  100.